package com.esunny.resourcevisualization.service;

import com.esunny.resourcevisualization.domain.entity.ResourceTypeEntity;
import com.esunny.resourcevisualization.domain.request.PageData;
import com.esunny.resourcevisualization.domain.request.QueryEntityListDto;
import com.esunny.resourcevisualization.domain.response.ReturnStructure;

import java.util.List;

/**
 * @version 1.0.0.0
 * @InterfaceName ResourceTypeEntityService
 * @Description 资源类别实体服务接口
 * @Author baochencong
 * @Date 2020/9/28 14:52
 */
public interface ResourceTypeEntityService {

    /**
     * 添加资源类别实体
     *
     * @param resourceTypeEntity 资源类别实体
     * @return 添加结果信息
     */
    ReturnStructure addResourceTypeEntity(ResourceTypeEntity resourceTypeEntity);

    /**
     * 根据实体id删除资源类别实体
     *
     * @param entityId 资源类别实体id
     * @return 删除结果信息
     */
    ReturnStructure deleteResourceTypeEntityByEntityId(int entityId);

    /**
     * 根据资源类别实体id修改资源类别实体信息
     *
     * @param resourceTypeEntity 资源类别实体信息
     * @return 修改结果
     */
    ReturnStructure updateResourceTypeEntityByEntityId(ResourceTypeEntity resourceTypeEntity);

    /**
     * 根据资源类别实体id修改资源类别实体删除状态
     *
     * @param entityId 资源类别实体id
     * @return 修改结果
     */
    ReturnStructure markDeleteResourceTypeEntityByEntityId(int entityId);

    /**
     * 通过资源类别实体id获取资源类别实体
     *
     * @param entityId 资源类别实体id
     * @return 资源类别实体信息
     */
    ResourceTypeEntity getResourceTypeEntityByEntityId(int entityId);

    /**
     * 通过资源类别英文名获取资源类别实体列表
     *
     * @param name 资源类别英文名
     * @return 资源类别实体列表
     */
    List<ResourceTypeEntity> getResourceTypeEntityListByName(String name);

    /**
     * 通过资源类别英文名获取指定页资源实体信息列表
     *
     * @param pageData 分页信息列表
     * @param name 资源类别英文名
     * @return 获取资源实体分页信息列表结果
     */
    PageData<ResourceTypeEntity> getResourceEntityPageListByName(PageData<ResourceTypeEntity> pageData,String name);

    /**
     * 获取可以申请的实体资源列表
     *
     * @param resourceTypeEntity 查找条件
     * @return 实体列表
     */
    List<ResourceTypeEntity> getMayApplyEntityList(ResourceTypeEntity resourceTypeEntity);

    /**
     * 通过资源类别英文名和实体id获取资源类别实体列表
     *
     * @param entityId 实体id
     * @param name     资源类别英文名
     * @return 资源类别实体
     */
    ResourceTypeEntity getResourceTypeEntityByEntityIdAndName(int entityId, String name);

    /**
     * 获取资源类别实体列表
     *
     * @return 资源类比实体列表
     */
    List<ResourceTypeEntity> getResourceTypeEntityList();

    /**
     * 通过创建人英文名获取实体列表
     *
     * @param createdBy 创建人英文名
     * @return 资源实体列表
     */
    List<ResourceTypeEntity> getResourceTypeEntityListByCreated(String createdBy);

    /**
     * 获取资源类别实体信息列表
     *
     * @param queryEntityListDto 查询条件dto
     * @return 获取资源类别实体信息结果
     */
    List<ResourceTypeEntity> queryResourceTypeEntityList(QueryEntityListDto queryEntityListDto);
    /**
     * 获取资源类别实体信息分页列表
     *
     * @param queryEntityListDto 查询条件dto
     * @return 获取资源类别实体信息分页列表
     */
     PageData<ResourceTypeEntity>  queryResourceEntityPageList(QueryEntityListDto queryEntityListDto);

    /**
     * 通过最后一次修改人英文名获取实体列表
     *
     * @param lastEditedBy 最后一次修改人英文名
     * @return 资源实体列表
     */
    List<ResourceTypeEntity> getResourceTypeEntityListByLastEdited(String lastEditedBy);

    /**
     * 通过资源类别英文名和创建人英文名获取实体列表
     *
     * @param name      资源类别英文名
     * @param createdBy 创建人英文名
     * @return 资源实体列表
     */
    List<ResourceTypeEntity> getResourceTypeEntityListByNameAndCreated(String name, String createdBy);

    /**
     * 通过资源类别英文名和最后一次修改人英文名获取实体列表
     *
     * @param name         资源类别英文名
     * @param lastEditedBy 最后一次修改人英文名
     * @return 资源实体列表
     */
    List<ResourceTypeEntity> getResourceTypeEntityListByNameAndLastEdited(String name, String lastEditedBy);

    /**
     * 通过资源类别名和状态获取资源实体列表
     *
     * @param name   资源类别名
     * @param status 状态
     * @return 资源实体列表
     */
    List<ResourceTypeEntity> getResourceTypeEntityListByNameAndStatus(String name, String status);

    /**
     * 通过资源实体id修改资源实体状态
     *
     * @param resourceTypeEntity 实体信息
     * @return 更新结果
     */
    ReturnStructure updateResourceTypeEntityStatusById(ResourceTypeEntity resourceTypeEntity);
}
